/*
 * @lc app=leetcode.cn id=160 lang=java
 *
 * [160] 相交链表
 */

// @lc code=start

import java.util.List;

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

        // 边界条件判断
        if(headA == null || headB == null){
            return null;
        }

        ListNode pA = headA, pB = headB;

        // 指针 PA 和 指针 PB 不断向后遍历，直到找到相交点
        while(pA != pB) {
            // 指针 PA 一开始在链表 A 上遍历，当走到链表 A 的尾部即 null 时，跳转到链表 B 上 
            pA = (pA == null) ? headB : pA.next;
            // 指针 PB 一开始在链表 B 上遍历，当走到链表 B 的尾部即 null 时，跳转到链表 A 上
            pB = (pB == null) ? headA : pB.next;
        }
        return pA;
        
    }
}
// @lc code=end

